import axios from "axios";
import { getItem } from "@/utils/cookieUtil";
import { Notification, MessageBox, Message, Loading } from 'element-ui'

export const requests = axios.create({
    // 基础路径
    baseURL: '/dev-api',
    // 代表请求超过的时间
    timeout: 15000,

});

// 请求拦截器：在发送请求之前，拦截器可以检测到
requests.interceptors.request.use((config) => {
    // // 若存在token则在请求头中加入token
    const token = getItem("Authorization")
    if (token != null && token != undefined && token != "") {
        config.headers['Authorization'] = 'Bearer ' + token
    }
    return config;
})

// 响应拦截器
requests.interceptors.response.use((res) => {
    // 成功的回调函数：服务器响应数据回来以后，拦截器可以检测到
    const code = res.data.code || 200
    // 获取错误信息
    const msg = res.data.msg
    // 二进制数据则直接返回
    if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
        return res.data
    }
    if (code === 401) {
        MessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
            location.href = '/'
        }).catch(() => {
        })
        localStorage.removeItem("Authorization")
        localStorage.removeItem("userInfo")
        return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
    } else if (code === 500) {
        Message({ message: msg, type: 'error' })
        return Promise.reject(new Error(msg))
    } else if (code === 601) {
        Message({ message: msg, type: 'warning' })
        return Promise.reject('error')
    } else if (code !== 200) {
        Notification.error({ title: msg })
        return Promise.reject('error')
    } else {
        return res.data
    }
}, (error) => {
    // 响应失败的回调函数
    return Promise.reject(error.response.data)
})
